package com.ys.day28.socket;

/**
 * 描述: socket
 * 所谓套接字(Socket)，就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。
 * 一个套接字就是网络上进程通信的一端，提供了应用层进程利用网络协议交换数据的机制。
 * 从所处的地位来讲，套接字上联应用进程，下联网络协议栈，是应用程序通过网络协议进行通信的接口，是应用程序与网络协议根进行交互的接口'
 *
 * Java的套接字 封装TCP的协议类型和各项数据 使我们不需要关注协议的实现了,只需要关心逻辑的实现
 *  1: 每个进程在 OS 中都有一个PID
 *  2: 不同的OS 的PID 会重复
 *  3: socket 就可以为我们标志 网络中的唯一的 进程实现 :
 *      socket=协议+地址+端口(每个端口对应一个PID)
 *   ipv4 体系下 只能有65535个端口号供选择使用 (前1024,已经分配给具体公用信息资源标志了)
 *   因为ipv4的报文信息: 32 Byte 启动 第一层的 4 byte 16bit用于表示IP数据包总体（IP协议首部+数据）的长度。IP数据报最大的长度为65535字节
 *   所以 socket 在ipv4体系下也只有65535个端口使用
 *
 *  一般在Java中的使用套接字socket 分为2个部分, 一个服务端的socket,一个客户端的socket对象
 *
 *
 * @author CodeYang
 * @version 2021/1/8 16:28
 */
public class P1socket了解与应用 {


    /**
     * #####      2.4.1 客户端套接字
     *
     * ​	相关的类：java.net.Socket 表示客户端套接字
     *
     * ​	常用的成员方法： InputStream getInputStream() 获取套接字的输入管道
     *
     * ​					OutputStream getOutputStream() 获取套接字的输出管道
     *
     * ​        常用的构造方法： Socket(String ,int) 参数1：表示要连接的服务器地址(可以是域名地址，也可以是IP地址)。参数2：服务器的端口号。如果该对象成功创建表示客户端和服务器成功建立连接了。每当客户端向服务器发送一次请求就会创建一个Socket套接字对象。
     *
     * #####    2.4.2 服务器端套接字
     *
     * ​	相关的类：java.net.ServerSocket 表示服务器端套接字
     *
     * ​	常用的成员方法：Socket accept() 接收客户端的请求连接，此方法是一个阻塞式的方法，如果没有收到客户端连接就会一直阻塞。该方法成功调用会返回一个客户端套接字对象Socket，并且可以接收客户端的数据。
     * @param args
     */
    public static void main(String[] args) {
    }
}
